/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import Entity.Dosen;
import Entity.DosenPemilikHaki;
import Entity.PublikasiHaki;
import Entity.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import library.Koneksi;

/**
 *
 * @author user
 * model untuk menangani operasi database berkaitan dengan pemilik karya yang mendapatkan HaKI
 */
public class DaftarPemilikHaki {

    DosenPemilikHaki dosenPemilikHaki;

    //method digunakan untuk menambah data pemilik karya yang mendapatkan HaKI
    public boolean tambahTimDosenPemilikHaki(DosenPemilikHaki dosen) {

        boolean hasil = false;
        this.dosenPemilikHaki = dosen;
        String sql;
        if (dosen.getNamaPeneliti() != null) {
            sql = "insert into pemilik_haki_eksternal(ID_KARYA_HAKI, NAMA_PEMILIK_HAKI) "
                    + "value(" + this.dosenPemilikHaki.getPublikasiKarya().getIdKaryaHaki()
                    + ", '" + this.dosenPemilikHaki.getNamaPeneliti()
                    + "')";
        } else {
            sql = "insert into dosen_pemilik_haki(ID_USER, ID_KARYA_HAKI, STATUS_PENGUPLOAD) "
                    + "value('" + this.dosenPemilikHaki.getDosen().getUser().getIdUser()
                    + "', " + this.dosenPemilikHaki.getPublikasiKarya().getIdKaryaHaki()
                    + ", '" + this.dosenPemilikHaki.getStatusPengupload()
                    + "')";
        }
        System.out.println(sql);
        PreparedStatement st = null;
        try {
            Connection conn = Koneksi.getKoneksi();
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate();
            if (rs > 0) {
                hasil = true;
            } else {
                return false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return hasil;

    }

    //method digunakan untuk menghapus data pemilik karya yang mendapatkan HaKI
    public boolean hapusDosenPemilikHaki(DosenPemilikHaki dosen) {

        boolean hasil = true;

        PreparedStatement st = null;

        String sql = "DELETE FROM dosen_pemilik_haki WHERE ID_USER = '" + dosen.getDosen().getUser().getIdUser() + "' AND ID_KARYA_HAKI = " + dosen.getPublikasiKarya().getIdKaryaHaki();

        Connection conn = Koneksi.getKoneksi();
        try {
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate();
            if (rs > 0) {
                hasil = true;
            } else {
                sql = "DELETE FROM pemilik_haki_eksternal WHERE ID_PEMILIK_HAKI = "+dosen.getDosen().getUser().getIdUser()+" AND ID_KARYA_HAKI = "+dosen.getPublikasiKarya().getIdKaryaHaki();
                st = conn.prepareStatement(sql);
                rs = st.executeUpdate();
                if(rs > 0){
                    hasil = true;
                }else{
                    hasil = false;
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return hasil;

    }

    //method digunakan untuk mengambil data pemilik karya yang mendapatkan HaKI
    public List<DosenPemilikHaki> ambilDosenPemilikHaki(PublikasiHaki publikasiHaki) {

        List<DosenPemilikHaki> listDosenPemilikHaki = new ArrayList<DosenPemilikHaki>();

        String sql = "SELECT * FROM karya_haki AS A, dosen_pemilik_haki AS B, user AS C, dosen AS D "
                + "WHERE A.ID_KARYA_HAKI = B.ID_KARYA_HAKI "
                + "AND B.ID_USER = D.ID_USER AND D.ID_USER = C.ID_USER "
                + "and A.ID_KARYA_HAKI = " + publikasiHaki.getIdKaryaHaki();
        PreparedStatement st = null;
        ResultSet rs = null;
        try {

            Connection conn = Koneksi.getKoneksi();

            st = conn.prepareStatement(sql);
            rs = st.executeQuery();

            while (rs.next()) {
                this.dosenPemilikHaki = new DosenPemilikHaki();

                User user = new User();
                user.setIdUser(rs.getString("ID_USER"));
                user.setNamaUser(rs.getString("NAMA_USER"));
                
                Dosen dosen = new Dosen();
                dosen.setUser(user);

                publikasiHaki.setIdKaryaHaki(rs.getInt("ID_KARYA_HAKI"));

                this.dosenPemilikHaki.setDosen(dosen);
                this.dosenPemilikHaki.setPublikasiKarya(publikasiHaki);
                this.dosenPemilikHaki.setStatusPengupload(rs.getString("STATUS_PENGUPLOAD"));

                listDosenPemilikHaki.add(this.dosenPemilikHaki);
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listDosenPemilikHaki;

    }
    
    //method digunakan untuk mengambil data pemilik karya yang mendapatkan HaKI (eksternal jurusan Sistem Informasi)
    public List<DosenPemilikHaki> ambilDosenPemilikHakiEksternal(PublikasiHaki karyaHaki) {

        List<DosenPemilikHaki> listDosenPemilikHaki = new ArrayList<DosenPemilikHaki>();

        String sql = "SELECT * FROM karya_haki AS A, pemilik_haki_eksternal AS B "
                + "WHERE A.ID_KARYA_HAKI = B.ID_KARYA_HAKI "
                + "and A.ID_KARYA_HAKI = " + karyaHaki.getIdKaryaHaki();
        PreparedStatement st = null;
        ResultSet rs = null;
        try {

            Connection conn = Koneksi.getKoneksi();

            st = conn.prepareStatement(sql);
            rs = st.executeQuery();

            while (rs.next()) {
                this.dosenPemilikHaki = new DosenPemilikHaki();

                User user = new User();
                user.setIdUser(rs.getString("ID_PEMILIK_HAKI"));
                
                Dosen dosen = new Dosen();
                dosen.setUser(user);
                
                karyaHaki.setIdKaryaHaki(rs.getInt("ID_KARYA_HAKI"));

                this.dosenPemilikHaki.setDosen(dosen);
                this.dosenPemilikHaki.setNamaPeneliti(rs.getString("NAMA_PEMILIK_HAKI"));
                this.dosenPemilikHaki.setPublikasiKarya(karyaHaki);

                listDosenPemilikHaki.add(this.dosenPemilikHaki);
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikHaki.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listDosenPemilikHaki;

    }
    
    //method digunakan untuk mengecek data pemilik karya yang mendapatkan HaKI apakah teleh terdapat pada database
    public boolean cekTimDosen(DosenPemilikHaki dosen){
        
        Connection conn = Koneksi.getKoneksi();
        PreparedStatement st = null;
        boolean hasil = true;
        
        try {
            String sqlCek = "select * from dosen_pemilik_haki where ID_USER = '"+dosen.getDosen().getUser().getIdUser()+"' and ID_KARYA_HAKI = "+dosen.getPublikasiKarya().getIdKaryaHaki();
            st = conn.prepareStatement(sqlCek);
            ResultSet rs = st.executeQuery();
            rs.last();
            int row = rs.getRow();
            if(row > 0 ){
                hasil = false;
            } else{
                hasil = true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarDosenPeneliti.class.getName()).log(Level.SEVERE, null, ex);
        }        
        
        return hasil;
        
    }
    
}
